package gorm

import (
	"errors"
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

type DB struct {
	// 数据库连接驱动 mysql | sqlserver | sqlite | postgres
	Driver string
	// 数据库地址，如：127.0.0.1
	Host string
	// 数据库用户名，如：root
	User string
	// 数据库连接密码
	Pass string
	// 数据库服务端口，如：3306
	Port int
	// 数据库名称
	Database string
	// 数据库编码，如：utf8mb4
	Charset string
	// 数据库连接资源
	Connection *gorm.DB
}

// Connect 连接
func (db *DB) Connect() error {
	var err error
	switch db.Driver {
	case "mysql":
		err = db.ConnectMysql()
	default:
		err = errors.New(fmt.Sprintf("driver (%s) not found", db.Driver))
		db.Connection = nil
	}
	return err
}

// ConnectMysql MySQL连接
func (db *DB) ConnectMysql() error {
	// 创建连接
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=true&loc=Local", db.User, db.Pass, db.Host, db.Port, db.Database, db.Charset)
	mysql, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err == nil {
		db.Connection = mysql
	}

	return err
}

// Destroy 销毁数据库连接资源
func (db *DB) Destroy() {
	sqlDB, err := db.Connection.DB()
	if err != nil {
		panic(err)
	}
	err = sqlDB.Close()
	if err != nil {
		panic(err)
	}
}
